package cn.lcsjsxy.yxz.keywords.import_package;

public class shiyong {
    //5.13
    //this的使用            理解:当前对象或当前正在创建的对象
    //可以用来修饰:属性,方法,构造器
    // 1.在类的方法中，我们可以使用"this.属性"或"this.方法"的方式，调用当前对象属性或方法。
    // 但是，通常情况下，我们都选择省略"this."。特殊情况下，如果方法的形参和类的属性同名时，
    // 我们必须显式的使用"this.变量"的方式，表明此变量是属性，而非形参。
    //2.在类的构造器中，我们可以使用"this.属性"或"this.方法"的方式，调用当前正在创建的对象属性或方法。
    //但是，通常情况下，我们都选择省略"this."。特殊情况下，如果构造器的形参和类的属性同名时，我们必须显式
    // 的使用"this.变量"的方式，表明此变量是属性，而非形参。

    //this调用构造器
    // ① 我们在类的构造器中，可以显式的使用"this(形参列表)"方式，调用本类中指定的其他构造器
    // ② 构造器中不能通过"this(形参列表)"方式调用自己
    // ③ 如果一个类中有n个构造器，则最多有 n - 1构造器中使用了"this(形参列表)"
    // ④ 规定："this(形参列表)"必须声明在当前构造器的首行
    // ⑤ 构造器内部，最多只能声明一个"this(形参列表)"，用来调用其他的构造器
    public static void main(String[] args) {
        //测试
        Person p1 = new Person();
        p1.setAge(1);

        System.out.println(p1.getAge());

        p1.eat();

        System.out.println();

        Person p2 = new Person("20");
        System.out.println(p2.getAge());

    }

}
class Person {
    private String name;
    private int age;


    public Person(){
        this.eat();
        String info = "Person初始化时考虑如下的1,2,3,4...";
        System.out.println(info);
    }

    public Person(String name){
        this();
        this.name = name;
    }

    public Person(int age){
        this();
        this.age = age;
    }

    public Person(String name,int age){
        this(age);
        this.name = name;
        this.age = age;
    }




    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getAge() {
        return age;
    }

    public void eat(){
        System.out.println("人吃饭");
        this.study();
    }
    public void study(){
        System.out.println("人学习");
    }
}